#ifndef HITTABLE_H
#define HITTABLE_H

#include "public_header.h"//可以不要，main.cpp 里已经包含了

class hit_record {
  public:
    point3 p;
    vec3 normal;
    double t;
    bool front_face;
    bool is_contour;//是否是轮廓
    //传入的outward_normal是单位向量
    void set_face_normal(const ray& r, const vec3& outward_normal) {
        // Sets the hit record normal vector.
        // NOTE: the parameter `outward_normal` is assumed to have unit length.
        front_face = dot(r.direction(), outward_normal) < 0;
        normal = front_face ? outward_normal : -outward_normal;
    }
};
/*
你可以让各种几何体（如球体、平面等）继承自 hittable，并实现自己的 hit 方法。
*/
class hittable {
public:
    virtual bool hit(const ray& r, interval ray_t, hit_record& rec) const = 0;
};

#endif